package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 调用私有方法
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Person p = new Person();
//        p.hehe();//不能在此类的外部访问私有方法

        Class cls = Class.forName("reflect.Person");
        Object o = cls.newInstance();
        /** getMethod():仅能获取公开方法 */
//        Method m1 = cls.getMethod("hehe");
//        m1.invoke(o);
        /** getDeclaredMethod():获取私有方法 */
        Method m2 = cls.getDeclaredMethod("hehe");
        m2.setAccessible(true);//打开访问权
        m2.invoke(o);
        /*
            getMethod():可以获取此类的所有公开的方法，包含从超类继承的。
            getDeclaredMethod():可以获取此类定义的所有方法，包含私有方法。
                                需要 XX.setAccessible(true) 打开访问权(强制,具有破坏性)
         */




    }
}
